package org.ichihamigua.common.qiniucloud.service;

import com.alibaba.fastjson2.JSONObject;
import org.ichihamigua.common.framework.entity.Result;
import org.ichihamigua.common.qiniucloud.vo.InitPartUploadResponseVo;
import org.ichihamigua.common.qiniucloud.vo.UploadFileVo;
import org.ichihamigua.common.qiniucloud.vo.UploadPartVo;
import org.springframework.web.multipart.MultipartFile;

/**
 * 七牛云对象存储服务
 * @author rainkyzhong
 * @date 2023/10/29 1:09
 */
public interface QiniuObjectStoreService {

    /**
     * 上传文件
     * @param bucketName 空间名
     * @param fileName 文件名
     * @param file 文件
     * @return 上传结果
     */
    Result<UploadFileVo> upload(String bucketName, String fileName, MultipartFile file);

    /**
     * 删除文件
     * @param encodedEntryURI 请求文件URI
     * @return 删除结果
     */
    Result<JSONObject> delete(String encodedEntryURI);


    /**
     * 通知服务端开启分片上传任务
     * @param bucketName 空名称
     * @param saveName 保存名称
     * @return 请求结果
     */
    Result<InitPartUploadResponseVo> initiateMultipartUpload(String bucketName, String saveName);

    /**
     * 分片上传文件
     * @param bucketName 空间
     * @param saveName 保存名称
     * @param uploadId  上传任务ID
     * @param partNumber    分片序号
     * @param file  文件
     * @return  请求结果
     */
    Result<UploadPartVo> uploadPart(String bucketName, String saveName, String uploadId, Integer partNumber, MultipartFile file);

    /**
     * 完成分片上传任务
     * @param bucketName 空间名
     * @param saveName  保存名称
     * @param uploadId  上传任务ID
     * @return  请求结果
     */
    Result<JSONObject> completeMultipartUpload(String bucketName, String saveName, String uploadId);
}
